const utils = {};

// 节流
// 规定时间内，只触发一次，可以通过设置immediate来决定触发的时机在这个时间的开始，还是结束的时候执行。
// this.$u.throttle(Function, 500)
// func <Function> 触发回调执行的函数
// wait <Number> 时间间隔，单位ms
// immediate <Number> 在开始还是结束处触发，比如设置wait为1000ms，如果在一秒内进行了5次操作，只触发一次，如果immediate为true，那么就会在第一次操作 触发回调，如果为false，就会在第5次操作触发回调。

// 防抖
// 在连续的操作中，无论进行了多长时间，只有某一次的操作后在指定的时间内没有再操作，这一次才被判定有效
// this.$u.debounce(Function, 500)
// func <Function> 触发回调执行的函数
// wait <Number> 时间间隔，单位ms
// immediate <Number> 在开始还是结束处触发，如非特殊情况，一般默认为false即可


// 相册中选择图片
utils.choose=() => {
	return new Promise((resolve, reject) => {
		uni.chooseImage({
			count: 1, //默认9
			sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图，默认二者都有
			sourceType: ['album','camera'], //从相册选择
			success(res) {
				resolve(res);
			},
			fail(err) {
				reject(err);
			}
		});
	})	
}

// 上传文件
utils.upload = (path,filePath)=>{
	return new Promise((resolve, reject) => {
		uni.showLoading({
			title:"上传中...",
		})
		uni.uploadFile({
			url: `${url.url}/${path}` ,
			filePath,
			name: 'file',
			success(res) {
				resolve(res);
				uni.hideLoading()
			},
			fail(err) {
				reject(err);
				uni.hideLoading()
			}
		});
	})	
}

// 上传文件
utils.uploadFile = (path,fileList,formData)=>{
	// file: 文件临时路劲
	let files = []
	let token = uni.getStorageSync("token")
	fileList.forEach(item=>{
		files.push({'name':'file','uri':item})
	})
	return new Promise((resolve, reject) => {
		uni.showLoading({
			title:"上传中...",
			icon: "loading"
		})
		uni.uploadFile({
			url: `${url.url}/${path}` ,
			files,
			header:{"token":token},
			formData,
			success(res) {
				resolve(res);
				uni.hideLoading()
			},
			fail(err) {
				reject(err);
				uni.hideLoading()
			}
		});
	})	
}

// 定时器
utils.sleep = (callback,interval=1500) => {
	setTimeout(()=>{
		callback()
	},interval)
}

// rpx转换成px
utils.rpxTopx = (rpx) =>{
	let deviceWidth = wx.getSystemInfoSync().windowWidth
	let px = Number(rpx) / ( 750 / deviceWidth ) 
	return Math.floor(px)
}

// px转换成rpx
utils.pxTorpx = (px) =>{
	let deviceWidth = wx.getSystemInfoSync().windowWidth
	let rpx = Number(px) * ( 750 / deviceWidth ) 
	return Math.floor(rpx)
}

export default utils
